#include <iostream>
#include <string>

using namespace std;

class person
{
private:
    
public:
    string name;//姓名
    string sex;//性别
    int age;//年龄

public:
    person(string name,string sex,int age) : name(name), sex(sex),age(age)
    {
        cout << "父类有参构造" << endl;
    }
    person()
    {
        //显示赋值初始化
        name = "未设置姓名";
        sex = "沃尔玛购物袋";
        age = 90;
        cout << "父类无参构造" << endl;
    }
    ~person()
    {
        cout << "我是父类的析构" << endl;
    }
};

class student : public person
{
private:
    /* data */

public:
    int id;

public:
    //调用父类的有参构造
    student(string name,string sex,int age,int id)
        : person(name,sex,age),id(id)
    {
        cout << "子类有参构造" << endl;
    }

    //子类无参构造
    student()
    {
        //显示赋值初始化
        name = "未设置姓名";
        sex = "笔记本电脑";
        age = 10;
        cout << "子类无参构造" << endl;
    }
    ~student()
    {
        cout << "我是子类的析构" << endl;
    }

public:
    void show_date()
    {
        //子类调用父类的成员属性
        cout << "姓名" << name << endl;//直接使用 子类没有重名的情况下 可以使用
        cout << "年龄" << person::age << endl;//使用父类做区分 子类有重名的情况下 可以使用
        cout << "性别" << this->sex << endl;  //和第一种一样
        cout << "学号" << this->id << endl;
    }
};



int main(int argc, char const *argv[])
{
    student s1;
    //子类对象 类外 如何 使用父类的成员
    //直接使用
    s1.name = "张三";   
    s1.age = 10;
    s1.sex = "男";
    s1.id = 10;

    s1.show_date();
    
    
    return 0;
}
